/**
 * 在一个大括号 {} 中
 * 使用let关键字声明的变量才具有块级作用域
 * var 关键字不具有这个特点的
 * #
 * 防止循环变量变成全局变量
 * 不存在变量提升,  例如先使用, 后声明
 */

if (true) {
    var a = 10;
    // 使用let关键字声明的变量具有块级作用域
    let b = 10;
    console.log(`if Block scope ${b}`)
    if (true) {
        let c = 30;
        console.log(`innerIf Block scope ${c}`)
    }
}
console.log(a)  // 10
// console.log(b)  // ReferenceError: b is not defined


let i;
// --------------- 防止循环变量变成全局变量 -------------------
for (i = 0; i < 4; i++) {

}
console.log(`for Block scope ${i}`)

// --------------- 不存在变量提升, 只能先声明, 再使用 ----------------------
// console.log(tes)        // Cannot access 'tes' before initialization
// let tes = '123'

// --------------- 使用let关键字声明的变量具有暂时性死区特性 --------------
// var num = 10;
// if (true) {
//     console.log(num)    // ReferenceError: Cannot access 'num' before initialization
//     let num = 200;
// }
